package cn.element.io.bio.chat;

import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;

/**
 * 实现BIO模式下端口转发思想
 * 
 * 1. 注册端口
 * 2. 接收客户端的Socket连接,交给一个独立的线程来处理
 * 3. 把当前连接的客户端Socket存入到一个所谓的在线Socket
 * 4. 接收客户端的消息,然后推送给所有在线的Socket接收
 */
public class Server {

    /**
     * 定义一个静态集合
     */
    public static final List<Socket> socketsOnline = new ArrayList<>();

    public static void main(String[] args) {
        try {
            ServerSocket server = new ServerSocket(9999);
            while (true) {
                Socket socket = server.accept();
                
                // 把登录的客户端Socket存入到一个在线集合里
                socketsOnline.add(socket);
                
                // 为当前登录成功的Socket分配一个独立的线程来处理与之通信
                new ServerReaderThread(socket).start();
            }
        } catch(Exception e) {
            e.printStackTrace();
        }
    }
    

}
